const Article = require('../models/Article');
const User = require('../models/User');

// 创建文章
exports.createArticle = async (req, res) => {
  try {
    const { title, content } = req.body;
    
    const newArticle = new Article({
      title,
      content,
      author: req.userId
    });
    
    const article = await newArticle.save();
    res.status(201).json(article);
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 获取所有文章
exports.getArticles = async (req, res) => {
  try {
    const articles = await Article.find().populate('author', 'username email');
    res.json(articles);
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 获取单篇文章
exports.getArticle = async (req, res) => {
  try {
    const article = await Article.findById(req.params.id).populate('author', 'username email');
    
    if (!article) {
      return res.status(404).json({ message: '文章不存在' });
    }
    
    res.json(article);
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 更新文章
exports.updateArticle = async (req, res) => {
  try {
    const { title, content } = req.body;
    const articleId = req.params.id;
    
    // 检查文章是否存在
    let article = await Article.findById(articleId);
    if (!article) {
      return res.status(404).json({ message: '文章不存在' });
    }
    
    // 检查是否是文章作者
    if (article.author.toString() !== req.userId) {
      return res.status(403).json({ message: '无权限修改此文章' });
    }
    
    // 更新文章
    article = await Article.findByIdAndUpdate(
      articleId,
      { title, content },
      { new: true }
    );
    
    res.json(article);
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 删除文章
exports.deleteArticle = async (req, res) => {
  try {
    const article = await Article.findById(req.params.id);
    
    if (!article) {
      return res.status(404).json({ message: '文章不存在' });
    }
    
    // 检查是否是文章作者
    if (article.author.toString() !== req.userId) {
      return res.status(403).json({ message: '无权限删除此文章' });
    }
    
    await Article.findByIdAndDelete(req.params.id);
    res.json({ message: '文章已删除' });
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: '服务器错误' });
  }
};